// Shader Variable
// (c) jimon game studio

#ifndef JEH_ISHADERVARIABLE
#define JEH_ISHADERVARIABLE

#include "jeUnknown.h"
#include "jeStl.h"

namespace je
{
	namespace video
	{
		//! Shader Variable
		class IShaderVariable:public je::jeUnknown
		{
		public:
			//! Destructor
			virtual ~IShaderVariable()
			{
			}

			//! Get Shader Variable Name
			virtual const jeStringc & GetName() = 0;

			//! Set Matrix
			virtual void SetMatrix(const jeMatrix4f & Matrix) = 0;

			//! Set Matrix 3x3 (set up 3x3 part of 4x4 matrix)
			virtual void SetMatrix3x3(const jeMatrix4f & Matrix) = 0;

			//! Set s32
			virtual void Sets32(const s32 * Data,s32 Size) = 0;

			//! Set s32
			virtual void Sets32(s32 Value)
			{
				Sets32(&Value,1);
			}

			//! Set f32
			virtual void Setf32(const f32 * Data,s32 Size) = 0;

			//! Set f32
			virtual void Setf32(f32 Value)
			{
				Setf32(&Value,1);
			}

			//! Set Vector Array
			virtual void SetVector(const jeVector3df * Vector,s32 Size) = 0;

			//! Set Vector
			virtual void SetVector(const jeVector3df & Vector) = 0;

			//! Set Vector
			virtual void SetVector(const jeVector3di & Vector) = 0;

			//! Set Vector
			virtual void SetVector(const jeVector2df & Vector) = 0;

			//! Set Vector
			virtual void SetVector(const jeVector2di & Vector) = 0;

			//! Set Cached Setup
			virtual void SetCachedSetup(u1 Enable) = 0;

			//! Is Cached Setup
			virtual u1 IsCachedSetup() = 0;

			//! Is Exist In Shader
			virtual u1 IsExistInShader() = 0;
		};
	}
}

#endif
